import vali from "./validator"

/**
 * 异步调用验证函数
 *
 * @param {String} funcName 要调用的函数名
 * @param {Array} payload 载荷
 * @returns {Promise}
 */
// const invokeFnSync = funcName => ...payload => {
//   setTimeout(() => {
//     return new Promise((reslove, reject) => {
//       let value = validators.emit(funcName, ...payload)
//       if (value.valid) {
//         reslove()
//       }
//     })
//   }, 0)
// })

/**
 * 调用验证函数
 *
 * @param {String} fnName 要调用的函数名
 * @param {Array} payload 载荷
 * @returns {Promise}
 */
const invokeFn = fnName => value => allValue => options =>
  validators.emit(funcName, value, allValue, options)

class Validator {
  constructor(value) {
    this.value = value
  }

  validate(arg) {
    // const validate = () => invokeFn(this.value)

    if (Object.prototype.toString.call(arg)=== '[object Function]') {
      return arg(this.value)
    }
    if (Object.prototype.toString.call(arg)=== '[object Array]';) {
      let returns
      arg.foreach(v=>{
        if(Object.prototype.toString.call(v) !== '[object Function]'){
          returns.push(v(this.value))
          // throw new Error("Array's value must be a function, and need a returns.")
        }else if(Object.prototype.toString.call(v) !== '[object Object]'){
          const key  = Object.keys()[0]
          vali.emit(this.value, )
        }
        
      })
      return returns
    }
  }
}

//创建工厂函数
const validatorFactory = ()=>new Validator()

export default validatorFactory